package com.lcx.movie.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.lcx.movie.common.Rep;
import com.lcx.movie.entity.User;
import com.lcx.movie.service.UserService;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * @Description  用户控制类
 * @version 1.0
 * @date 2025/3/19 10:06
 */
@CrossOrigin(origins = "*")
@RestController
public class UserController {



    @Autowired
    private UserService userService;

    /**
     * 用户登录
     * @param userName 用户名
     * @param passWord 密码
     * @return rep对象
     */
    @GetMapping("/userLogin")
    public Rep userLogin(String userName, String passWord){
        User user = userService.userLogin(userName,passWord);
        return new Rep().addData("user",user);
    }

    /**
     *  //用户注册(用户添加)
     * @param user 用户实体
     * @return 字符串提示信息
     */
    @PostMapping("/insertUser")
    public String insertUser(@RequestBody User user) {
        return userService.insertUser(user)>0?"注册成功":"注册失败";
    }

    /**
     * 分页模糊查询用户(用户账号)
     * @param page 当前页数
     * @param userName 用户名
     * @return rep对象
     */
    @GetMapping("selectUser/{page}")
    public Rep selectUserPage(@PathVariable("page")int page,@RequestParam(required = false) String userName) {
        PageHelper.startPage(page,10);
        //执行查询
        List<User>list=this.userService.selectUserPage(userName);
        PageInfo<User>userPageInfo=new PageInfo<>(list);
        return new Rep().addData("userPageInfo",userPageInfo);
    }

    /**
     * //详细查看用户信息
     * @param userId 用户id
     * @return rep对象
     */
    @PostMapping("/selectUserId")
    public Rep selectUserId(int userId){
        User user=this.userService.selectUserId(userId);
        return new Rep().addData("user",user);
    }

    /**
     * //修改用户
     * @param user 用户对象
     * @return 字符串提示信息
     */
    @PostMapping("/updateUser")
    public String updateUser(@RequestBody User user){
        return userService.updateUser(user);
    }

    /**
     * //删除用户
     * @param userId 用户id
     * @return 字符串提示信息
     */
    @GetMapping("/deleteUserId")
    public String deleteUserId(Integer userId) {
        return userService.deleteUserId(userId);
    }

    /**
     * //修改用户信息
     * @param userName 用户名
     * @param userEmail 用户邮箱
     * @param userId 用户id
     * @return 字符串提示信息
     */
    @GetMapping("/updateUser")
    public String updateUser(@Param("userName")String userName, @Param("userEmail") String userEmail, @Param("userId") Integer userId){
        int updateUser = userService.updateUsers(userName,userEmail,userId);
        if(updateUser>0){
            return "修改用户信息成功";
        }else {
            return "修改用户信息失败";
        }
    }

    /**
     * //用户修改密码
     * @param requestBody 请求对象
     * @return 字符提示信息
     */
    @PostMapping("/updateUserPwd")
    public String updateUserPwd(@RequestBody Map<String, Object> requestBody) {
        String userPwd = (String) requestBody.get("userPwd");
        Integer userId = (Integer) requestBody.get("userId");
        int result = userService.updateUserPwd(userId, userPwd);
        if (result > 0) {
            return "success";
        } else {
            return "fail";
        }
    }
    /**
     * 管理员登录
     * @param userName 用户名
     * @param userPwd 密码
     * @return 用户对象
     */
    @GetMapping("/rootLogin")
    public Rep rootLogin(@Param("userName") String userName,@Param("userPwd") String userPwd){
        User rootLogin = this.userService.rootLogin(userName, userPwd);
        return new Rep().addData("rootLogin",rootLogin);
    }
    /**
     * 修改用户状态
     * @param userId
     * @param userStatus
     * @return
     */
    @GetMapping("/updateUserStatus")
    public String updateUserStatus(@Param("userId") Integer userId,@Param("userStatus") Integer userStatus) {
        System.out.println("userId = " + userId);
        System.out.println("userStatus = " + userStatus);
        return this.userService.updateUserStatus(userId,userStatus);
    }
    /**
     * 根据用户封禁表同时修改用户状态
     * @param userId 用户id
     * @return 受影响的行数
     */
    @PostMapping("/updateUserBanStatus")
    public String  updateUserBanStatus(@Param("userId") Integer userId){
        int updateUserBanStatus = this.userService.updateUserBanStatus(userId);
        if (updateUserBanStatus>0){
            return "用户状态修改成功";
        }else {
            return "用户状态修改失败";
        }
    }
    /**
     * 查询出管理员
     * @return 对象集合
     */
    @GetMapping("/selectUserRole")
    public Rep selectUserRole(){
        List<User> userList = userService.selectUserRole();
        return new Rep().addData("userList",userList);
    }
    /**
     * 修改申请注册影院的用户状态
     * @param userId 用户id
     * @return 受影响的行数
     */
    @GetMapping("/updateStatus")
    public String updateStatus(@Param("userId") Integer userId){
        int updateStatus = userService.updateStatus(userId);
        if (updateStatus>0){
            return "修改成功";
        }else{
            return "修改失败";
        }
    }

    /**
     * 注册用户名时是否重复
     * @param userName
     * @return
     */
    @GetMapping("/selectUserName")
    public String selectUserName(String userName) {
        int selectUserName = this.userService.selectUserName(userName);
        if (selectUserName>0){
            return "exist";
        }else {
            return "not exist";
        }
    }
    /**
     * 注册邮箱时是否重复
     * @param userEmail
     * @return
     */
    @GetMapping("/selectUserEmail")
    public String selectUserEmail(String userEmail) {
        int selectUserEmail = this.userService.selectUserEmail(userEmail);
        if (selectUserEmail>0){
            return "exist";
        }else {
            return "not exist";
        }
    }
}
